package concesionario.source;



import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;




import java.util.Date;

public class Coche implements Serializable{
    
    private String marca;
    private String modelo;
    private String matricula;
    private double preciodeCompra;
    private double preciodeVenta;
    private String estado;
    private Exposicion expo;
    private List<Reparacion> reparaciones;
    
    
    private String dniComprador;
    
    
    public static final String EN_REP="enReparacion";
    public static final String EN_VNT="enVenta";
    public static final String EN_RES="enReserva";
    public static final String EN_VDD="Vendido";
    
    
    public Coche(String marcaC,String modeloC,String matriculaC,
            double pC,double pV, String est){
        
     this.marca=marcaC;
     this.modelo=modeloC;
     this.matricula=matriculaC;
     this.preciodeCompra=pC;
     this.preciodeVenta=pV;
     this.estado=est;
     this.reparaciones=new ArrayList<Reparacion>();
     this.dniComprador=null;
        
    }
    public Coche(){
    
     this.marca="";
     this.modelo="";
     this.matricula="";
     this.preciodeCompra=0.0;
     this.preciodeVenta=0.0;
     this.estado = "";
    
    }
    
    //Métodos para modificar los atributos del Cohe.
    
    public void setMarca(String marcaC){
    
      this.marca=marcaC;       
    
    }
    public void setModelo(String modeloC){
    
      this.modelo=modeloC;       
    
    }
    public void setMatricula(String matriculaC){
    
      this.matricula=matriculaC;       
    
    }
    public void setPrecioCompra(double pC){
    
      this.preciodeCompra=pC;       
    
    }
    public void setPrecioVenta(double pV){
    
      this.preciodeVenta=pV;       
    
    }
    public void setEstado(String est){
    
      this.estado=est;       
    
    }
    
    public void setExpo(Exposicion expo){
     
        this.expo=expo;
  
    }
    public void setDniComprador(String dniC){
    
        this.dniComprador=dniC;
    }
    
    //Métodos Get
    
    public Reparacion getReparacion(int i){
    
        return this.reparaciones.get(i);
      
    }
    public int getSizeReparacion(){
    
        return this.reparaciones.size();
    }
    public String getMatricula(){
 
        return this.matricula;
    
    }
    public String getEstado(){
    
        return this.estado;
    }
    public String getDniComprador(){
    
        return this.dniComprador;
    }
    
    //EXPOSICIÓN
    
    //Método para cambiar nuestro Coche de Exposición.
    
    public void moverExposicion(Exposicion expo){
    
      if (this.expo!=expo){
      
          Exposicion oldExpo=this.expo;
          this.expo=expo;
          if(oldExpo!=null){
              oldExpo.bajaExposicionCoche(this);
          }
          if (expo!=null){
              expo.altaExposicionCoche(this);
          }
      }  
    }  
    
    public Exposicion getExpoCoches(){   
    
        return this.expo;
    
    }
   
    
    //REPARACIÓN
    
    public boolean buscarenReparacion(){
    
        //Buscar coche en reparacion.
       
        return this.estado.equals(Coche.EN_REP);
            
    }
    
    public void enviarReparar(String tipo){
        
       
      if(!buscarenReparacion()){  
        
      //cambiamos el estado a enReparacion.
      
        setEstado(Coche.EN_REP);
        
  
      //Agregamos a la lista de reparaciones.
        
        Date fecha=new Date();
        
        boolean rta=false;
        Reparacion rep=new Reparacion(rta,tipo,fecha.toString());
        reparaciones.add(rep);
        
      }else{
          
          throw new IllegalArgumentException();
   
      } 
    }
    
    public void reparar(){
      
        if(buscarenReparacion()){  
        
      //cambiamos el estado a enReparacion.
        
        setEstado(Coche.EN_VNT);
        
        
        //Modificamos la reparacion para ponerla Resuelta=true
        
        
        Date fecha=new Date();
        
        boolean rta=true;  
        Reparacion rep=new Reparacion(rta,this.reparaciones.get(this.reparaciones.size()-1).getTipo(),fecha.toString());
        reparaciones.add(rep);
        
      }else{
          
          throw new IllegalArgumentException();
   
      }
    
    }
    
    public boolean buscarenReserva(){
    
        //Buscar coche en reparacion.
       
        return this.estado.equals(Coche.EN_RES);
            
    } 
    
  @Override
  public String toString() {
      return this.matricula+" "+this.marca+" "+this.modelo;
  }
  
  }
 

